import re
import json

# 定义一个函数来提取文件中的 JSON 字符串


def extract_json_from_html(input_file, output_file):
    # 打开并读取 HTML 文件
    with open(input_file, 'r', encoding='utf-8') as file:
        html_content = file.read()

    # 使用正则表达式查找 JSON 字符串，假设 JSON 字符串是以大括号 {} 包围的
    json_pattern = r'\{.*?\}'
    json_strings = re.findall(json_pattern, html_content, re.DOTALL)

    # 打开输出文件准备写入
    with open(output_file, 'w', encoding='utf-8') as outfile:
        for json_str in json_strings:
            try:
                # 尝试解析 JSON 字符串，如果有效则写入文件
                json_obj = json.loads(json_str)
                # 检查 JSON 中是否有 "title" 和 "text" 两个键
                if 'title' in json_obj and 'text' in json_obj and '$:/' not in json_obj['title']:
                    outfile.write(json.dumps(
                        json_obj, ensure_ascii=False) + '\n')
            except json.JSONDecodeError:
                # 如果 JSON 格式错误，跳过
                continue

# 定义一个函数来提取 JSON 字符串中的目标链接


def extract_links_from_json(json_str):
    # 正则表达式匹配 '[[链接说明|目标字符串]]' 格式的内容
    link_pattern = r'\[\[(?:[^\|]*\|)?([^\]]+)\]\]'
    return re.findall(link_pattern, json_str)


if __name__ == '__main__':

    # 使用函数来提取 JSON 字符串
    input_file = 'docs\演示用_可被破坏.html'  # 输入的 HTML 文件路径
    output_file = 'data\extracted_json.txt'  # 输出的文本文件路径

    testStr = '23423]41231[[链接说明|3D打印拉丝问题]]234234234'
    testStr = '{"text": "JavaScript 显示数据\nJavaScript 可以通过不同的方式来输出数据：\n\n#使用 window.alert() 弹出警告框。\n#使用 document.write() 方法将内容写到 HTML 文档中。\n#使用 innerHTML 写入到 HTML 元素。\n#使用 console.log() 写入到浏览器的控制台。\n\n\n扩展阅读\n\n[[F12中通过js操作DOM]]", "title": "常用javascript代码", "tags": "JS\\JQuery", "modified": "20220811083107579", "created": "20201017002131364"}'
    # extract_json_from_html(input_file, output_file)
    a = extract_links_from_json(testStr)
    print('a==', a)
    with open(output_file, 'r', encoding='utf-8') as file:
        html_content = file.readlines()
        for item in html_content:
            if len(item) > 5:
                json_obj = json.loads(item)

                links = extract_links_from_json(item)
                if links:
                    print(links, json_obj['title'])
